import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { ValidationPipe } from '@nestjs/common';
// 导入我们创建的拦截器和过滤器
import { TransformInterceptor } from './common/interceptors/transform.interceptor';
import { HttpExceptionFilter } from './common/filters/http-exception.filter';
// 导入参数处理管道
import { ParamTransformPipe } from './common/pipes/param-transform.pipe';
async function bootstrap() {
  const app = await NestFactory.create(AppModule);

  // 启用全局验证管道
  app.useGlobalPipes(
    // 自定义管道验证
    new ParamTransformPipe(),
    // 已有的dto验证管道
    new ValidationPipe({
      // 启用白名单模式 - 自动移除DTO中未定义的属性
      whitelist: true,
      // 禁止非白名单属性 - 如果有未定义的属性，将抛出错误
      forbidNonWhitelisted: true,
      // 自动转换输入数据类型
      transform: true,
    }),
  );
  // 启用CORS - 这是最基本的配置
  // app.enableCors();

  // 高级CORS配置
  app.enableCors({
    // 允许的源 - 可以是字符串、字符串数组或函数
    origin: [
      'http://localhost:8080', // 前端开发服务器地址
      'http://127.0.0.1:8080',
    ],
    // 允许的HTTP方法
    methods: 'GET,HEAD,PUT,PATCH,POST,DELETE',
    // 允许携带凭证（如cookies）
    credentials: true,
    // 允许的请求头
    allowedHeaders: 'Content-Type, Accept, Authorization',
    // 暴露的响应头
    exposedHeaders: 'X-Custom-Header',
    //预检请求的有效期（秒）
    maxAge: 86400,
  });

  // 全局注册响应格式拦截器
  app.useGlobalInterceptors(new TransformInterceptor());

  // 全局注册异常过滤器
  app.useGlobalFilters(new HttpExceptionFilter());

  await app.listen(3000);
}
bootstrap();
